#ifndef _CAISSE_H
#define _CAISSE_H
#include "Terrain.h"

typedef enum etatCaisse{marcheCaisse,bloqueCaisse,objectifCaisse}etatCaisse;
typedef struct S_Caisse
{
  int x;
  int y;
  etatCaisse etat_c; 
  struct S_Caisse *suivant;
}Caisse;

/*Pre-condition: La liste  Caisse non prealablement initialise
 Postcondition: La liste de  caisse initialise et vide */
void  caiInit(Caisse *pCai);

/*Pre-condition: La caisse et le terrain initialisés et non vides
 Postcondition: La caisse deplace vers la droite d'une position */
void CaiDroite(Caisse *, const  Terrain *);

/*Pré-condition: La caisse et le terrain initialisés et non vides
 Postcondition: La caise deplacé vers la gauche d'une position */
void CaiGauche(Caisse *, const Terrain *);

/*Pré-condition: La caisse et le terrain initialisés et non vides
 Postcondition: La caisse deplacé vers le haut d'une position */
void CaiHaut(Caisse *, const Terrain *);

/*Pré-condition: La caisse et le terrain initialisés et non vides
 Postcondition: La caisse deplacé vers le bas d'une position */
void CaiBas(Caisse *, const Terrain *);

/*Pre-condition: Le pointeur sur caisse initialise
  Postcondition: retourne la position en abcisse x du sokoban*/
int CaiGetX(const Caisse *);

/*Pre-condition: Le pointeur sur caisse initialise
  Postcondition: retourne la position en ordonnée y  de la caisse*/
int CaiGetY(const Caisse *);

etatCaisse caiGetEtat(const Caisse *);

etatCaisse caiGetEtatTerrain(const Terrain *, const int, const int);

int caiRecherche(Caisse *,int, int);

void caiRecupereTer(Caisse *, const Terrain *);

#endif
